package com.dz.risk.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dz.risk.pojo.domain.ReportFormsDataValueEntity;
import com.dz.risk.pojo.model.InportFormulaModel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 报表数据值
 *
 * @author baohan
 * @email
 * @date 2021-07-05 14:49:45
 */
@Mapper
public interface ReportFormsDataValueDao extends BaseMapper<ReportFormsDataValueEntity> {

    /**
     * 根据报表ID删除信息
     * @param reportFormsId 报表ID
     * @return 删除得条数
     */
    int deleteByReportFormsId(@Param("reportFormsId") String reportFormsId);

    /**
     * 根据参数查询该报表版本得模板数据内容
     *
     * @param reportFormsSerialNumber 报表编号
     * @param reportFormsBeginDate    开始时间
     * @param reportFormsEndDate      结束时间时间
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectDynamicExcelVersion(@Param("reportFormsSerialNumber") String reportFormsSerialNumber, @Param("reportFormsBeginDate") Date reportFormsBeginDate, @Param("reportFormsEndDate") Date reportFormsEndDate);

    /**
     * 修改数值
     *
     * @param reportFormsDataValueEntity
     */
    void updateByReportFormsIdAndVersion(ReportFormsDataValueEntity reportFormsDataValueEntity);

    List<ReportFormsDataValueEntity> selectNotVersion(String reportFormsId);

    /**
     * 根据报表ID获取该报表模板数据
     *
     * @param reportFormsId 报表ID
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectReportTemplateByReportFormsId(@Param("reportFormsId") String reportFormsId);

    /**
     * 根据报表版本以及单元格编号查询报表数据值
     *
     * @param tableCellSerialNumber 单元格编号
     * @param beginDate             报表开始时间
     * @param endDate               报表结束时间
     * @param dateValueVersion      数据值版本
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectByReportFormsVersionAndIndexNumber(@Param("tableCellSerialNumber") String tableCellSerialNumber, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate, @Param("dateValueVersion") Date dateValueVersion);

    /**
     * 根据单元格编号查询数据值不为空的数据
     *
     * @param tableCellSerialNumber 单元格编号
     * @return 报表数据值集合
     */
    List<ReportFormsDataValueEntity> selectByCellSerialNumberAndDataValueIsNotNull(@Param("tableCellSerialNumber") String tableCellSerialNumber);

    BigDecimal selectByString(@Param("formula") String formula);

    /**
     * 删除报表下相同版本的报表计算数据
     *
     * @param reportFormsId    报表ID
     * @param dataValueVersion 数据值版本
     */
    void deleteByReportFormsIdAndVersion(@Param("reportFormsId") String reportFormsId, @Param("dataValueVersion") Date dataValueVersion);

    /**
     * 根据编号查询该编号以往的公式集合
     *
     * @param reportFormsSerialNumber 单元格编号
     * @return 数据值集合
     */
    List<ReportFormsDataValueEntity> selectFormula(String reportFormsSerialNumber);

    void updateFormula(@Param("formula") String formula, @Param("indexId") String indexId);

    /**
     * 根据编号以及计算时间查询该年月日得计算结果
     *
     * @param tableCellSerialNumber 编码
     * @param years                 年月日
     * @return 计算版本数据集合
     */
    List<ReportFormsDataValueEntity> selectBySerialNumberAndVersion(@Param("tableCellSerialNumber") String tableCellSerialNumber, @Param("years") Date years);

    /**
     * 根据计算版本删除报表计算数据
     *
     * @param calculatingTime 计算时间版本
     */
    void deleteByVersion(@Param("calculatingTime") Date calculatingTime);
}
